package com.baosight.risk.mapper.xtzy;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baosight.risk.base.mapper.BaseMapper;
import com.baosight.risk.service.quartz.entity.SyncOrgEntitiy;
import com.baosight.risk.service.xtzy.entity.XtzyCompany;
import com.baosight.risk.service.xtzy.entity.XtzyOrgEhr;
import com.baosight.risk.service.xtzy.entity.XtzyUser;
import com.baosight.risk.service.xtzy.vo.XtzyCompanyVO;

public interface XtzyCompanyMapper extends BaseMapper<XtzyCompany> {

    /**
     * 查询组织机构
     *
     * @param company 组织机构
     * @return
     */
    List<XtzyCompany> selectCompany(@Param("company") XtzyCompany company);

    /**
     * 查询全部组织机构
     *
     * @param company 组织机构
     * @return
     */
    List<XtzyCompany> selectAllCompany(@Param("company") XtzyCompany company);

    /**
     * 根据角色编码获得组织信息
     *
     * @param roleCode
     * @return
     */
    XtzyCompany getCompanyByRoleCode(@Param("roleCode") String roleCode);


    /**
     * 根据用户查找组织
     *
     * @param userCode
     * @return
     */
    List<XtzyCompany> getCompany(String userCode);

    /**
     * 根据层级找所有公司
     *
     * @param pathLevel
     * @return
     */
    List<XtzyCompanyVO> getCompanyByPathLevel(@Param("pathLevel") String pathLevel);

    /**
     * 根据角色查找组织
     *
     * @param roleId
     * @return
     */
    List<XtzyCompany> getCompanyByRoleId(@Param("roleId") String roleId);

    /**
     * 根据组织编码查组织
     *
     * @param compCode
     * @return
     */
    XtzyCompany getCompanyInfo(String compCode);

    XtzyCompany getCompanyByParentGuid(@Param("parentGuid") String parentGuid);


    List<XtzyCompany> getCompanyByGuid(@Param("parentGuid") String parentGuid);

    /**
     * 获取一级子公司或部门
     *
     * @param pathCode  路径
     * @param pathLevel 层级
     * @return
     */
    XtzyCompany getTopCompany(@Param("pathCode") String pathCode, @Param("pathLevel") Short pathLevel);

    /**
     * 获取上级公司
     *
     * @param pathCode
     * @return
     */
    XtzyCompany getCompByCompCode(@Param("pathCode") String pathCode);


    /**
     * 根据id禁用组织机构
     *
     * @param id 组织机构ID
     * @return
     */
    Integer deleteById(@Param("id") String id);


    /**
     * 找到可以发自评的一级子公司
     */
    List<XtzyCompany> getRiskCompany(@Param("company") XtzyCompany company);

    /**
     * 找到可以发自评的一级子公司（排序）
     */
    List<XtzyCompany> selectCompanyByRisk(@Param("pathCode") String pathCode);

    /**
     * 检索当前公司下全部子公司部门
     */
    List<XtzyCompany> selectAllSubsetByParentID(String parentGuid);

    /**
     * 更新公司启用禁用状态
     */
    Integer updateCompanyStatus(@Param("ids") List<String> ids, @Param("status") String status);

    /**
     * @return
     * @description 从dbprodk5中拉去全部宝山钢铁股份有限公司数据
     * @author CuiShiHao
     */
    List<SyncOrgEntitiy> getAllOrgFromOtherDB(@Param("syncOrgEntitiy") SyncOrgEntitiy syncOrgEntitiy);

    /**
     * 更新组织列表
     *
     * @param companyList 组织机构列表
     * @return
     */
    void updateCompanyList(@Param("list") List<XtzyCompany> companyList);

    Integer updateCompName(@Param("compCodes") List<String> compCodes, @Param("oldName") String oldName, @Param("newName") String newName, @Param("oldCode") String oldCode, @Param("newCode") String newCode);

    /**
     * 根据公司类型查询组织机构
     *
     * @param compType 公司类型
     */
    List<XtzyCompany> getCompByCompType(@Param("compType") String compType);

    List<XtzyUser> getUserByCompAndRole(@Param("compCode") String compCode, @Param("roleCode") String roleCode);

    XtzyCompany getTop1CompanyByUser(@Param("compCode") String compCode);

    /**
     * 查询EHR表所有公司、部门
     */
    List<XtzyOrgEhr> selectOrgEHR();

    List<XtzyCompany> selectCompanyList(@Param("compCode") String compCode);
    
    List<XtzyCompany> selectSubManageComps(@Param("pathCode") String pathCode,@Param("compCode") String compCode,@Param("pathLevel") int pathLevel);
    
    List<XtzyCompany> ownerCompList(@Param("compCode") String compCode);

    /**
     * 查询当前管理单位及其下属机构树
     */
    List<XtzyCompany> selectCompanySub(@Param("company") XtzyCompany company);

    List<XtzyCompany> selectCompanyLikeCompCode(@Param("pathCode") String pathCode);

}